import { request, downloadBlobFile } from 'src/utils';

export interface UserDto {
  userId: IdType; // 用户ID
  deptId: number; // 部门ID
  deptName: string; // 部门
  username: string; // 登录用户名
  nickname: string; // 昵称
  password: string; // 登录密码
  cellphone: string; // 手机号码
  email: string; // 电子邮箱
  gender: string; // 性别：M/F/O
  genderName: string; // 性别：M/F/O
  disabled: boolean; // 是否作废
  status: number; // 用户状态:0正常；1密码锁定；2密码过期；
  statusName: string; // 用户状态:0正常；1密码锁定；2密码过期；
  updatedBy: string; // 修改人
  updatedTime: Date; // 修改时间
  roleIds: number[];
}
export interface UserDataDto {
  userId: IdType; // 用户ID
  nickname: string; // 昵称
  cellphone: string; // 手机号码
  email: string; // 电子邮箱
  avatar: string; // 头像
  introduction: string; // 备注说明
}
const baseUrl = '/api/system/user';

/**
 * 查单个
 */
export function readData(userId: IdType): Promise<UserDto> {
  return request.get(baseUrl + '/' + userId);
}

/**
 * 查集合
 */
export function queryList(query: PageQuery): Promise<PageResult<UserDto>> {
  return request.get(baseUrl, { params: query });
}

/**
 * 新增，修改
 */
export function saveOrUpdate(user: UserDto): Promise<UserDto> {
  return user.userId ? request.put(baseUrl + '/' + user.userId, user) : request.post(baseUrl, user);
}

/**
 * 删除
 */
export function deleteByIds(ids: IdType[]): Promise<void> {
  return request.delete(baseUrl, { params: { ids } });
}

/**
 * 导出
 */
export function exportData(query: PageQuery): Promise<void> {
  return new Promise((resolve, reject) => {
    request
      .get(baseUrl + '/export', { params: query, responseType: 'blob' })
      .then((res) => {
        downloadBlobFile(res);
        resolve();
      })
      .catch((err) => reject(err));
  });
}

export default { readData, queryList, saveOrUpdate, deleteByIds, exportData } as CrudApi<UserDto>;

// 用户中心
export function readUserCenterData(): Promise<UserDataDto> {
  return request.get(baseUrl + '/uc-data');
}
export function updateUserData(dto: UserDataDto): Promise<void> {
  return request.put(baseUrl + '/uc-data', dto);
}
export function updatePassword(oldPwd: string, newPwd: string): Promise<void> {
  return request.put(baseUrl + '/uc-pwd', { oldPwd, newPwd });
}
